﻿using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Entidades.Tipos;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace Onshi.POS.Repositorios
{
    public class RepositorioDescuentosRecargosFechasHoras : RepositorioEntidad<DescuentoRecargoFechaHora, Int32, IServicioDatosDescuentosRecargosFechasHoras>
    {
        #region Constructores

        public RepositorioDescuentosRecargosFechasHoras()
            : base()
        {
        }

        #endregion

        #region Metodos

        protected override DescuentoRecargoFechaHora FilaAEntidad(DataRow fila)
        {
            var descuentoRecargoFechaHora = new DescuentoRecargoFechaHora();
            descuentoRecargoFechaHora.Id = (Int32)fila["IdDescuentoRecargoFechaHora"];
            descuentoRecargoFechaHora.Nombre = (String)fila["Nombre"];
            descuentoRecargoFechaHora.Observaciones = (String)fila["Observaciones"];
            descuentoRecargoFechaHora.Lunes = (Boolean)fila["Lunes"];
            descuentoRecargoFechaHora.Martes = (Boolean)fila["Martes"];
            descuentoRecargoFechaHora.Miercoles = (Boolean)fila["Miercoles"];
            descuentoRecargoFechaHora.Jueves = (Boolean)fila["Jueves"];
            descuentoRecargoFechaHora.Viernes = (Boolean)fila["Viernes"];
            descuentoRecargoFechaHora.Sabado = (Boolean)fila["Sabado"];
            descuentoRecargoFechaHora.Domingo = (Boolean)fila["Domingo"];
            descuentoRecargoFechaHora.FechaDesde = (DateTime)fila["FechaDesde"];
            descuentoRecargoFechaHora.FechaHasta = (DateTime)fila["FechaHasta"];
            descuentoRecargoFechaHora.HoraDesde = (TimeSpan)fila["HoraDesde"];
            descuentoRecargoFechaHora.HoraHasta = (TimeSpan)fila["HoraHasta"];
            descuentoRecargoFechaHora.DescuentoRecargo = (Decimal)fila["DescuentoRecargo"];
            return descuentoRecargoFechaHora;
        }

        public override DescuentoRecargoFechaHora DevolverPorId(Int32 id)
        {
            var descuentoRecargoFechaHora = entidades.Where(x => x.Id == id).FirstOrDefault();
            if (descuentoRecargoFechaHora == null)
                using (var ds = servicioDatos.DescuentosRecargosFechasHoras_DevolverPorId(id))
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        descuentoRecargoFechaHora = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(descuentoRecargoFechaHora);
                    }
            return descuentoRecargoFechaHora;
        }

        public void Insertar(DescuentoRecargoFechaHora descuentoRecargoFechaHora)
        {
            descuentoRecargoFechaHora.Id = servicioDatos.DescuentosRecargosFechasHoras_Insertar(descuentoRecargoFechaHora.Nombre, descuentoRecargoFechaHora.Observaciones, descuentoRecargoFechaHora.FechaDesde, descuentoRecargoFechaHora.FechaHasta, descuentoRecargoFechaHora.Lunes, descuentoRecargoFechaHora.Martes, descuentoRecargoFechaHora.Miercoles, descuentoRecargoFechaHora.Jueves, descuentoRecargoFechaHora.Viernes, descuentoRecargoFechaHora.Sabado, descuentoRecargoFechaHora.Domingo, descuentoRecargoFechaHora.HoraDesde, descuentoRecargoFechaHora.HoraHasta, descuentoRecargoFechaHora.DescuentoRecargo);
        }

        public void Modificar(DescuentoRecargoFechaHora descuentoRecargoFechaHora)
        {
            servicioDatos.DescuentosRecargosFechasHoras_Modificar(descuentoRecargoFechaHora.Id, descuentoRecargoFechaHora.Nombre, descuentoRecargoFechaHora.Observaciones, descuentoRecargoFechaHora.FechaDesde, descuentoRecargoFechaHora.FechaHasta, descuentoRecargoFechaHora.Lunes, descuentoRecargoFechaHora.Martes, descuentoRecargoFechaHora.Miercoles, descuentoRecargoFechaHora.Jueves, descuentoRecargoFechaHora.Viernes, descuentoRecargoFechaHora.Sabado, descuentoRecargoFechaHora.Domingo, descuentoRecargoFechaHora.HoraDesde, descuentoRecargoFechaHora.HoraHasta, descuentoRecargoFechaHora.DescuentoRecargo);
        }

        public void Eliminar(DescuentoRecargoFechaHora descuentoRecargoFechaHora)
        {
            servicioDatos.DescuentosRecargosFechasHoras_Eliminar(descuentoRecargoFechaHora.Id);
            descuentoRecargoFechaHora = null;
        }

        public List<DescuentoRecargoFechaHora> DevolverTodos()
        {
            using (var ds = servicioDatos.DescuentosRecargosFechasHoras_DevolverTodos())
                entidades = TablaALista(ds.Tables[0]);
            return entidades;
        }

        #endregion
    }
}